🧭 Kubernetes | August 21, 2021
쿠버네티스의 동작방식과 네임스페이스 구조를 알아봅시다!
쿠버네티스에 사용할 컨테이너 이미지를 저장소에 이미지 push
kubectl
의 yaml 형태든, CLI 형태든 명령어를 입력하게 되면,REST API Server
가 명령어를 받아서 명령어에 맞게 요청을 받음etcd
의 상태 정보를 확인Scheduler
입니다. 스케줄러는 REST API Server
에게 적절하게 판단해 응답REST API Server
는 해당하는 노드의 kubelet
에게 요청요청을 받은 kubelet
은 해당 명령어를 실제 컨테이너 엔진을 담당하는 docker 데몬
전달
알아두기
모든 컴포넌트는 마스터 노드의 API Server를 거쳐 운영됩니다.
etcd
kubelet
안에는 cAdvisor
가 있는데 워커노드의 상태정보를 모니터링하고, 해당 정보를 마스터노드의 REST API server
에 전달 후 etcd
에 전달schduler
REST API Server
반환controller
K8S API 종류 중 하나
알아두면 좋은 정보!
kubectl get pod
(파드가 없는 상태에서) 명령어 실행 시, No resources found in default namespace.
메시지를 볼 수 있는데 이는 네임스페이스를 지정해주지 않을 시, 기본 네임스페이스를 사용한다는 것을 유추할 수 있습니다.
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- image: nginx:1.14
name: nginx
ports:
- containerPort: 80
- containerPort: 443
yaml 파일로 실행 및 확인
$ kubectl create -f nginx.yaml
$ kubectl get pods
$ kubectl create namespace blue
orange 네임스페이스에 yaml 파일로 생성 & 실행
--dry-run
옵션은 실제로 실행하지 않고, 실행여부를 확인$ kubectl create namespace orange --dry-run -o yaml > orange-ns.yaml
$ kubectl create -f orange-ns.yaml -n orange
$ kubectl create -f nginx.yaml -n blue
apiVersion: v1
kind: Pod
metadata:
name: mypod
namespace: orange # 네임스페이스 지정
spec:
containers:
- image: nginx:1.14
name: nginx
ports:
- containerPort: 80
- containerPort: 443
이처럼 CLI, yaml 2가지의 방식을 통해 실행할 수 있습니다.
config
명령어를 통해 기본 context 정보 확인$ kubectl config view
config set-context
명령어를 통해 새로운 context를 추가
$ kubectl config set-context blue --cluster=kubernetes --user=kubernetes-admin --namespace=blue
$ kubectl config use-context blue
현재 지정된 네임스페이스 확인
$ kubectl config current-context
$ kubectl config use-context kubernetes-admin@kubernetes
$ kubectl delete namespace blue
주의사항!
하나의 네임스페이스 안에 여러 리소스가 존재하게 되는데, 네임스페이스를 지우게 된다면 안에 있는 리소스 모두 같이 삭제됩니다.